package com.skyd.core.game.td;

import java.util.concurrent.CopyOnWriteArrayList;


/**
 * 塔防演员接口
 * 
 * @author SkyD
 * 
 */
public interface ITDActor extends ITDEntity {

	/**
	 * 获取IsDead。 功能注释：是否已死亡
	 */
	boolean getIsDead();

	/**
	 * 设置IsDead。 功能注释：是否已死亡
	 * 
	 * @param value
	 *            IsDead
	 */
	void setIsDead(boolean value);

	/**
	 * 获取等级
	 * 
	 * @return
	 */
	public int getLevel();

	/**
	 * 获取半径
	 * 
	 * @return
	 */
	public float getRadius();

	/**
	 * 获取生命值
	 * 
	 * @return
	 */
	public int getHP();

	/**
	 * 获取生命最大值
	 * 
	 * @return
	 */
	public int getMaxHP();

	/**
	 * 获取攻击力
	 * 
	 * @return
	 */
	public float getATK();

	/**
	 * 获取速度
	 * 
	 * @return
	 */
	public float getSpeed();

	/**
	 * 获取攻击延迟
	 * 
	 * @return
	 */
	public float getAttackDelay();

	/**
	 * 获取移动延迟
	 * 
	 * @return
	 */
	public float getMoveDelay();

	/**
	 * 获取朝向
	 * 
	 * @return
	 */
	public float getDirection();

	/**
	 * 获取范围
	 * 
	 * @return
	 */
	public float getRange();

	/**
	 * 设置等级
	 * 
	 * @param value
	 *            等级
	 */
	public void setLevel(int value);

	/**
	 * 设置半径
	 * 
	 * @param value
	 *            半径
	 */
	public void setRadius(float value);

	/**
	 * 设置生命值
	 * 
	 * @param value
	 *            生命值
	 */
	public void setHP(int value);

	/**
	 * 设置生命最大值
	 * 
	 * @param value
	 *            生命最大值
	 */
	public void setMaxHP(int value);

	/**
	 * 设置攻击力
	 * 
	 * @param value
	 *            攻击力
	 */
	public void setATK(float value);

	/**
	 * 设置速度
	 * 
	 * @param value
	 *            速度
	 */
	public void setSpeed(float value);

	/**
	 * 设置攻击延迟
	 * 
	 * @param value
	 *            攻击延迟
	 */
	public void setAttackDelay(float value);

	/**
	 * 设置移动延迟
	 * 
	 * @param value
	 *            移动延迟
	 */
	public void setMoveDelay(float value);

	/**
	 * 设置朝向
	 * 
	 * @param value
	 *            朝向
	 */
	public void setDirection(float value);

	/**
	 * 设置范围
	 * 
	 * @param value
	 *            范围
	 */
	public void setRange(float value);

	/**
	 * 获取Price。 功能注释：价格
	 */
	int getPrice();

	/**
	 * 设置Price。 功能注释：价格
	 * 
	 * @param value
	 *            Price
	 */
	void setPrice(int value);

	/**
	 * 获取IsAirUnits。 功能注释：是否为空中单位
	 */
	boolean getIsAirUnits();

	/**
	 * 设置IsAirUnits。 功能注释：是否为空中单位
	 * 
	 * @param value
	 *            IsAirUnits
	 */
	void setIsAirUnits(boolean value);

	/**
	 * 获取IsCanAttackAirUnits。 功能注释：是否可以攻击空中单位
	 */
	boolean getIsCanAttackAirUnits();

	/**
	 * 设置IsCanAttackAirUnits。 功能注释：是否可以攻击空中单位
	 * 
	 * @param value
	 *            IsCanAttackAirUnits
	 */
	void setIsCanAttackAirUnits(boolean value);

	/**
	 * 获取IsCanAttackGroundUnits。 功能注释：是否可以攻击地面单位
	 */
	boolean getIsCanAttackGroundUnits();

	/**
	 * 设置IsCanAttackGroundUnits。 功能注释：是否可以攻击地面单位
	 * 
	 * @param value
	 *            IsCanAttackGroundUnits
	 */
	void setIsCanAttackGroundUnits(boolean value);

	/**
	 * 获取范围内的演员
	 * 
	 * @return
	 */
	public CopyOnWriteArrayList<ITDActor> getActorsInRange();

	/**
	 * 获取范围内的塔
	 * 
	 * @return
	 */
	public CopyOnWriteArrayList<ITDTower> getTowersInRange();

	/**
	 * 获取范围内的生物
	 * 
	 * @return
	 */
	public CopyOnWriteArrayList<ITDBiont> getBiontInRange();

	/**
	 * 获取所在地图块
	 * 
	 * @return
	 */
	public ITDMapPiece getPlaceMapPiece();

	/**
	 * 添加攻击监听器
	 * 
	 * @param listener
	 *            监听器
	 */
	public void addOnAttackListener(ITDActorAttackListener listener);

	/**
	 * 添加遭受攻击监听器
	 * 
	 * @param listener
	 *            监听器
	 */
	public void addOnUnderAttackListener(ITDActorUnderAttackListener listener);

	/**
	 * 添加死亡监听器
	 * 
	 * @param listener
	 *            监听器
	 */
	public void addOnDieListener(ITDActorDieListener listener);

	/**
	 * 添加移动监听器
	 * 
	 * @param listener
	 *            监听器
	 */
	public void addOnMoveListener(ITDActorMoveListener listener);

	/**
	 * 添加站立监听器
	 * 
	 * @param listener
	 *            监听器
	 */
	public void addOnStandListener(ITDActorStandListener listener);
	/**
	 * 获取Effect。 功能注释：附加效果
	 */
	ITDEffect getEffect();

	/**
	 * 设置Effect。 功能注释：附加效果
	 * 
	 * @param value
	 *            Effect
	 */
	void setEffect(ITDEffect value);

	/**
	 * 移除附加效果
	 * 
	 * @param value
	 */
	void removeEffect(ITDEffect value);

	/**
	 * 获取最终状态
	 * 
	 * @return
	 */
	ITDActor getFinalStatus();

	/**
	 * 添加附加效果监听器
	 * 
	 * @param listener
	 *            监听器
	 */
	void addOnAttachEffectListener(ITDActorAttachEffectListener listener);
	
	/**
	 * 添加移除效果监听器
	 * 
	 * @param listener
	 *            监听器
	 */
	void addOnRemoveEffectListener(ITDActorRemoveEffectListener listener);
}
